# Numpy ndarray对象
# Numpy 定义了一个n维数组对象，简称ndarray，它是一个一系列相同类型的元素组成的数组集合。
# Numpy ndarray对象是C语言编写的，因此ndarray对象在速度和效率上有所优势。
# Numpy ndarray对象是多维的，因此ndarray对象可以表示矩阵。
# Numpy ndarray对象采用了数组的索引机制，将数组中的每一个元素映射到内存块上，并且按照一定的布局对内存块进行排列。

# Numpy创建数组
'''
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
object: 数组对象，可以是列表、元组、字典、矩阵、数组、标量、文件、函数等
detype: 可更改或定义数组元素的数据类型
copy: 创建ndarray对象时，是否复制object中的数据
order: 创建ndarray对象时，数据排列顺序，K表示保持原数据排列顺序
subok: 创建ndarray对象时，是否将子类传递给创建的ndarray对象
ndmin: 创建ndarray对象时，最小维数
'''
import numpy as np
a = np.array([1,2,3,4,5])
print(a)
print(a.dtype)

#从0-9中获可以被2整除的数组
b = np.array([i for i in range(10) if i%2==0])
print(b)
print(b.dtype)


c = np.array([i for i in range(10)],dtype=np.float64)
print(c)
print(c.dtype)

d = np.array(c)     #这句是浅拷贝，在内存空间中产生新的数据
print(d)
print(id(c),id(d))

#创建矩阵
e = np.asmatrix([1,2,3,4])
print(type(e))

at = np.array(e,subok=True)
af = np.array(e)   #subok默认False
print('at subok=True',type(at))              #at是矩阵numpy.matrix
print('af subok=False',type(af))             #af是数组numpy.ndarray
print(id(e),id(at),id(af))

print('--------------------------------------------------------------')

#arange()生成区间数组
#numpy.arange([start,] stop[, step,], dtype=None)
#start: 区间开始值 默认为0
#stop: 区间结束值
#step: 区间步长 默认为1
#dtype: 指定生成的数组的数据类型
a = np.arange(10)
print(a) #[0 1 2 3 4 5 6 7 8 9]

#起始10，终止20，步长2
b = np.arange(10,20,2)
print(b) #[10 12 14 16 18]

#应用实例：在200米的校园主干道一侧，从起点开始每隔3米插一面彩旗，由近到远排成一排
#最后一面彩旗会插到终点处吗？一共应插多少面彩旗？
a = np.arange(0,200+1,3)
print(a[-1])  #198 问题一： 不会
print(len(a))  #67 问题二： 一共应插67面彩旗
print('--------------------------------------------------------------')
